跳到主要内容

Wfuzz 命令总结

家有余粮鸡犬饱,户多书籍子孙贤。

导航


壹 - 工具简介

WFuzz(Web Fuzzer) 是一个用 Python 编写的 Web 模糊测试(Fuzzing)工具,用于对 HTTP 参数、URL 路径、头部、Cookie 等位置进行爆破和模糊测试。

贰 - 命令用法

基本

#单测试点单载荷用法
wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

#同上面命令等价
wfuzz -z file,wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

#多测试点多载荷用法
wfuzz -w common1.txt -w common2.txt -w extensions_common3.txt http://testphp.vulnweb.com/FUZZ/FUZ2ZFUZ3Z

请求

选项:-X 可指定使用请求方法发起 HTTP 请求。

wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/

选项:-d 可附带 POST 请求所需要 发送的数据

wfuzz -w wordlist/others/common_pass.txt -d "uname=FUZZ&pass=FUZZ" http://testphp.vulnweb.com/userinfo.php

选项:-b 可附带 Web 会话所需的 Cookies 信息。

wfuzz -w wordlist/general/common.txt -b cookie=value1 -b cookie2=value2 http://testphp.vulnweb.com/FUZZ

...生成的请求头...
GET /attach HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Content-Type: application/x-www-form-urlencoded
Cookie: cookie=value1; cookie2=value2
User-Agent: Wfuzz/2.2
Connection: close

选项:-H 可自定义 HTTP 请求头中的参数信息。

#修改 User-Agent 参数并新增 Myheader 参数
wfuzz -w wordlist/general/common.txt -H "myheader: headervalue" -H "User-Agent: Google" http://testphp.vulnweb.com/FUZZ

...生成的请求头...
GET /asp HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Myheader: headervalue
Content-Type: application/x-www-form-urlencoded
User-Agent: Google
Connection: close

载荷

所谓载荷,其实就是指字典,而关于这字典该如何生成这便是本小节要描述的主要事情。

本节分为三个部分,分别是:类型、编码、迭代器。其中,类型中的工具决定了字典的数据该如何生成编码中的算法决定了生成的字典数据该如何变形迭代器中的工具则决定了字典与字典之间该如何组合使用。三者共同作用使得 wfuzz 的载荷功能非常的强大且灵活。

类型

可用类型:wfuzz -e payloads

常用类型:list、range、file、stdin、ipnet、iprange、hexrange

#list 示例
wfuzz -z list,"a-b-c" http://192.168.56.1/FUZZ

#range 示例
wfuzz -z range,1-3 http://192.168.56.1/FUZZ

#file 示例
wfuzz -z file,/root/lowercase-chars.txt http://192.168.56.1/FUZZ

#stdin 示例
crunch 2 2 ab | wfuzz -z stdin http://192.168.56.1/FUZZ

#ipnet 示例
wfuzz -z ipnet,192.168.56.0/30 http://192.168.56.1/FUZZ

#iprange 示例
wfuzz -z iprange,192.168.56.1-192.168.56.3 http://192.168.56.1/FUZZ

#hexrange 示例
wfuzz -z hexrange,a1-a3 http://192.168.56.1/FUZZ

编码

可用编码:wfuzz -e encoders

常用编码:none、base64、urlencode、md5、sha1、sha256、sha512

#base64 示例
wfuzz -z range,1-3,base64 http://192.168.56.1/FUZZ

#多编码器示例【对数据分别进行两次编码,产生 6 条新的数据。】
wfuzz -z range,1-3,base64-md5 http://192.168.56.1/FUZZ

#编码器迭代示例【将数据先用 base64 编码,产生的结果再用 md5 编码。】
wfuzz -z range,1-3,base64@md5 http://192.168.56.1/FUZZ

#编码组示例【编码组有 default、hashes、ntml、url、html、db,可通过 wfuzz -e encoders 查看。】
wfuzz -z range,1-3,hashes http://192.168.56.1/FUZZ

迭代器

可用迭代器:wfuzz -e iterators

常用迭代器:chain、product、zip

#chain 示例(列表合并)
wfuzz -z list,a-b -z list,1-2 -m chain http://google.com/FUZZ

...输出结果...
00001: C=404 9 L 32 W 280 Ch "b"
00002: C=404 9 L 32 W 280 Ch "a"
00003: C=404 9 L 32 W 280 Ch "1"
00004: C=404 9 L 32 W 280 Ch "2"
...

#product 示例(排列组合)
wfuzz -z list,a-b -z list,1-2 http://mysite.com/FUZZ/FUZ2Z

...输出结果...
00001: C=404 9 L 32 W 276 Ch "a - 2"
00002: C=404 9 L 32 W 276 Ch "a - 1"
00004: C=404 9 L 32 W 276 Ch "b - 2"
00003: C=404 9 L 32 W 276 Ch "b - 1"
...

#zip 示例(一一相对)
wfuzz -z list,a-b -z list,1-2 -m zip http://google.com/FUZZ/FUZ2Z

...输出结果...
00001: C=404 9 L 32 W 276 Ch "a - 1"
00002: C=404 9 L 32 W 276 Ch "b - 2"
...

过滤

选项:–-hc–-hl–-hw–-hh隐藏过滤器,分别用来将匹配到 **HTTP 响应的 代码(code)、行数(lines)、单词数(words)、字符数(chars )**的响应所对应的请求隐藏 ,不匹配则显示在输出结果中。

#将请求所返回的响应代码是 404、403 的请求隐藏掉,不显示在输出结果中。
wfuzz -w wordlist/general/common.txt --hc 404,403 http://testphp.vulnweb.com/FUZZ

选项:–-sc–-sl–-sw–-sh显示过滤器,分别用来将匹配到 **HTTP 响应的 代码(code)、行数(lines)、单词数(words)、字符数(chars )**的响应所对应的请求显示,不匹配则不显示在输出结果中 。

#仅显示有正确响应的请求
wfuzz -w wordlist/general/common.txt --sc 200 http://testphp.vulnweb.com/FUZZ

选项:--hs--ss 是支持正则表达式的 隐藏/显示 过滤器,它可以通过匹配响应结果中的字符串来确定该响应所对应的请求是隐藏还是显示。【注:正则过滤器与上面那些常规过滤器最大的不同便是:正则过滤器可以使用字符串去匹配响应,而不是只能使用整数去匹配。】

#检测哪个请求的响应中存在 vulnerable 字符串,匹配便显示。
wfuzz -H "User-Agent: () { :;}; echo; echo vulnerable" --ss vulnerable -w cgis.txt http://localhost:8000/FUZZ

#使用正则表达式的用法匹配 vulnerable 字符串
wfuzz -H "User-Agent: () { :;}; echo; echo vulnerable" --ss "vul.*ble" -w cgis.txt http://localhost:8000/FUZZ

选项:--filter 是一种比上述所有过滤器都更灵活的过滤器,但它的过滤表达式用法也更为复杂一些。【语法帮助

#过滤出那些响应代码是 200 且响应行数大于 97 的请求。
wfuzz -z range,0-10 --filter "c=200 and l>97" http://testphp.vulnweb.com/listproducts.php?cat=FUZZ

杂项

选项:-p 可为 wfuzz 提供代理支持。支持的代理类型有:HTTP、SOCKS4、SOCKS5。

wfuzz -p 127.0.0.1:8080:HTTP -z list,"a-b" http://192.168.56.1/FUZZ

选项:--basic/ntlm/digest 可为 wfuzz 提供身份验证的功能,这对于那些受保护的网站很有用。

wfuzz -z list,"user-admin" --basic FUZZ:FUZZ http://192.168.56.1/

叁 - 杂七杂八

(1)常用示例

#多测试点
wfuzz -z range,1-3 -z file,/root/lowercase-chars.txt http://192.168.56.1/FUZZ/FUZ2Z

#带会话信息的请求
wfuzz -w /root/lowercase-chars.txt -d "uname=admin&pass=admin" -b "cookie1=value1; cookie2=value2" -b cookie3=value3 http://192.168.56.1/FUZZ

#正则表达式过滤器(匹配显示)
wfuzz -w /root/lowercase-chars.txt --ss "vul.*ble" http://192.168.56.1/FUZZ

#代理请求
wfuzz -p 127.0.0.1:8080:HTTP -z list,"a-b" http://192.168.56.1/FUZZ

(2)wfuzz 还支持的命令有:wfpayload(离线字典生成)、wfencode(离线编码器)、wxfuzz(wfuzz 图形化界面)。